﻿using System.IO;

namespace DimensionsHelper.Common.Contracts.Metadata;

public interface IMetadataWriter
{
    /// <summary>
    ///     写入文本时是否添加缩进。
    /// </summary>
    bool WriteIndented { get; set; }

    /// <summary>
    ///     写入文本时是否忽略附加属性定义。
    /// </summary>
    bool IgnoreProperty { get; set; }

    /// <summary>
    ///     获取或设置写入时使用的语言类型。
    /// </summary>
    string Language { get; set; }

    /// <summary>
    ///     获取或设置写入时使用的上下文类型。
    /// </summary>
    string Context { get; set; }

    /// <summary>
    ///     向指定文件流中写入指定字段定义。
    /// </summary>
    /// <param name="fileStream">当前已打开的文本流</param>
    /// <param name="field">需要写入的字段定义</param>
    void Write(FileStream fileStream, params IField[] field);

    /// <summary>
    ///     向已打开的<see cref="StreamWriter" />中写入给定字段定义。
    /// </summary>
    /// <param name="writer">已打开的流对象</param>
    /// <param name="field">需要写入的字段定义</param>
    void Write(StreamWriter writer, params IField[] field);

    /// <summary>
    ///     向指定文件流中写入指定元数据文档定义。
    /// </summary>
    /// <param name="fileStream">当前已打开的文本流</param>
    /// <param name="document">需要写入的元数据文档</param>
    void Write(FileStream fileStream, IMetadataDocument document);

    /// <summary>
    ///     向已打开的<see cref="StreamWriter" />中写入给定元数据文档定义。
    /// </summary>
    /// <param name="writer">已打开的流对象</param>
    /// <param name="document">需要写入的元数据文档</param>
    void Write(StreamWriter writer, IMetadataDocument document);
}